package com.qq.server.model;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Iterator;

import com.qq.common.*;
import com.server.db.SqlHelper;

/*
是服务器于某个客服端通信的线程。
*/
public class ServerClientTreader extends Thread{
   Socket s;
   public ServerClientTreader(Socket s){
	   //吧服务端和客户端的连接赋值。
	   this.s = s;
   }
   //让服务器，通知其他用户在线人。
   public void notifOther(String iam){
	   HashMap hm = ZongClientThread.hm;
	   Iterator it = hm.keySet().iterator();
	   while(it.hasNext()){
		   Massage m = new Massage();
		   m.setCon(iam);
		   m.setMesType(MessageType.message_ret_onLinehaoyou);
		   String onLine = it.next().toString();
		   try {
			ObjectOutputStream oos = new ObjectOutputStream(ZongClientThread.getclientThread(onLine).s.getOutputStream());
		    m.setGetter(onLine);
		    oos.writeObject(m);
		   } catch (IOException e) {
			e.printStackTrace();
		}
	   }
   }
   public void run(){
	  //该线程就可以接受客户端的信息。 
	   while(true){
	   try {
		   ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
			Massage m=(Massage)ois.readObject();
			if(m.getMesType().equals(MessageType.message_comm_mes)){
			//System.out.println(m.getSender()+"给"+m.getGetter()+"说"+m.getCon());
			//一会转发。
			//将记录放入数据库中
			SqlHelper qqoracle =new SqlHelper();
			qqoracle.SetJiLu(m.getSender(),m.getCon(),m.getGetter());
			//取的接收人的通信线程，
			ServerClientTreader sc=ZongClientThread.getclientThread(m.getGetter());
			ObjectOutputStream oos=new ObjectOutputStream(sc.s.getOutputStream());
	        oos.writeObject(m);
			}else if(m.getMesType().equals(MessageType.message_get_onLinehaoyou)){
				//吧在服务器的好友给她返回。
				String res=ZongClientThread.getAllonLine();
				Massage m2=new Massage();
				m2.setMesType(MessageType.message_ret_onLinehaoyou);
				m2.setCon(res);
				m2.setGetter(m.getSender());
				ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
				oos.writeObject(m2);
			}
	   } catch (Exception e) {
		e.printStackTrace();
	}
   }
   }

}
